package com.ruoyi.df.service.impl;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ZipUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.ruoyi.common.config.props.AllPathProperties;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.ProcessStopException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ExecUtil;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.SseEmitterUtils;
import com.ruoyi.common.utils.biz.BizModule;
import com.ruoyi.common.utils.biz.PathUtil;
import com.ruoyi.common.utils.biz.ResultSaveModule;
import com.ruoyi.df.domain.DensityMergeParam;
import com.ruoyi.df.mapper.AtmosphericDensityGridMapper;
import com.ruoyi.df.service.AtmosphericDensityGridService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import javax.annotation.Resource;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.rmi.ServerException;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

@Service
@Slf4j
public class AtmosphericDensityGridServiceImpl implements AtmosphericDensityGridService {


    @Autowired
    private AllPathProperties allPath;

    @Autowired
    RedisTemplate redisTemplate;

    private String folder = "/Highly_normalized/";

    @Resource
    AtmosphericDensityGridMapper atmosphericDensityGridMapper;

    @Override
    public AjaxResult getMergeData(Map<String, Object> map) throws ProcessStopException {
        //设置每一个用户的通讯管道
        LoginUser loginUser = SecurityUtils.getLoginUser();
        String sseId = map.get("sseId")+loginUser.getUsername();
        List<Map<String, Object>> param = (List<Map<String, Object>>) map.get("param");

        // List <2013-11-24 02#2013-11-25 02#SWDATA_OBS_DEN_GRACEB#2013-11-24 14#10>
        List<String> timeList = new ArrayList<>();
        for (int i = 0; i < param.size(); i++) {
            Map<String, Object> maps = param.get(i);
            Date segment = DateUtils.convertString2Date("yyyy-MM-dd HH",maps.get("startTime").toString()+" "+maps.get("hour"));
            Calendar stCalendar = Calendar.getInstance();
            stCalendar.setTime(segment);
            stCalendar.add(Calendar.HOUR_OF_DAY, -12);
            Date start = stCalendar.getTime();
            Date end = DateUtils.convertString2Date("yyyy-MM-dd HH",maps.get("endTime")+" "+maps.get("hour"));
            long duration = end.getTime()-start.getTime();
            int day = (int)Math.ceil((double) duration/86400000d); // 86400000 ms = 1 天
            Date date = start;
            //将时间拼装成时间段
            for (int j=0; j<=day; j++){
                if (date.before(end)&& day>0){
                    String time = DateUtils.convertDate2String("yyyy-MM-dd HH", date)+"#";
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(date);
                    calendar.add(Calendar.DAY_OF_MONTH, 1);
                    date = calendar.getTime();
                    if (!date.after(end)){
                        //判断中间时间是否超出时间范围结束时间
                        String centime = "";
                        int endHour = calendar.get(Calendar.HOUR_OF_DAY);
                        if (Integer.valueOf(maps.get("hour")+"")>endHour){
                            centime = time.substring(0,10)+" "+maps.get("hour");
                        }else {
                            centime = DateUtils.convertDate2String("yyyy-MM-dd HH", date).substring(0,10)+" "+maps.get("hour");
                        }
                        time+=(DateUtils.convertDate2String("yyyy-MM-dd HH", date)+"#"+maps.get("satellite")+"#"+centime)+"#"+maps.get("resolution")+"#"+i;
                        timeList.add(time);
                    }else {
                        break;
                    }
                }
            }
        }
        //计算是否需要进行多线程处理，如果时间跨度大于一小时则进行多线程处理，最多开辟12个线程
        //判断是否需要多线程处理
        //如果时间跨度小于等于1小时则不需要执行多线程进行数据处理
        List<Map<String, Object>> resList = new ArrayList<>();
        List<String> commandList = new ArrayList<>();

        log.debug("最终的timeList，size: {}",timeList.size());
        timeList.forEach(o -> log.debug(o));

        commandList.add("python");
        commandList.add("-u");

        String  pythonPath = allPath.getRootPath().getBase()
                + allPath.getRootPath().getPathCode()
                + allPath.getModuleDir().getDataFusion().get("dir")
                + allPath.getModuleDir().getDataFusion().get("density");

        commandList.add(pythonPath);

        Map<String,List<Object>> filePathMap= new ConcurrentHashMap<>(); //要根据param数组顺序分组

        //设置输入文件路径

        if (timeList.size()==1) {
            //根据时间进行数据抽取并生成txt
            String[] args = timeList.get(0).split("#");
            String startTime = args[0];
            String endTime = args[1];
            //获取融合时间点
            String centime = args[3];
            List<Map<String, Object>> list = atmosphericDensityGridMapper.getSatelliteData(args[2],startTime+":00:00" , endTime+":00:00");
            if(CollUtil.isEmpty(list)){
                return AjaxResult.error("当前时间范围密度数据不存在");
            }
            String path = allPath.getRootPath().getBase() + allPath.getRootPath().getPathTmp() + allPath.getModuleDir().getDataFusion().get("dir") +folder+"iniPath/"+timeList.get(0).split("#")[2]+"_"+startTime.replaceAll(" ","-")+"_"+endTime.replaceAll(" ","-")+".txt";
            writeToFile(path, list);
            commandList.add(args[2].split("_")[args[2].split("_").length-1]);
            commandList.add(path);
            commandList.add(args[4]);
            commandList.add(args[4]);
            commandList.add(allPath.getRootPath().getBase() + allPath.getRootPath().getPathTmp() + allPath.getModuleDir().getDataFusion().get("dir") +folder);
            commandList.add(startTime.replaceAll(" ","-")+"_"+endTime.replaceAll(" ","-"));
            commandList.add(centime.replaceAll(" ","-"));
            System.out.println(commandList.get(0)+" "+commandList.get(1)+" "+commandList.get(2)+" "+commandList.get(3)+" "+commandList.get(4)+" "+commandList.get(5)+" "+commandList.get(6)+" "+commandList.get(7)+" "+commandList.get(8)+" "+commandList.get(9));
            String results = ExecUtil.execPython(commandList ,sseId);
            System.out.println(results);
            results = results.split("###")[1];
            results = results.replaceAll("\'","\"");
            //进行Json字符串转换
            Map<String,Object> resMap = JSON.parseObject(results, Map.class);
            if (resMap.isEmpty()){
                return AjaxResult.success("获取数据元素为空");
            }
//            System.out.println(results);
//            Map<String, Object> resMap = readFile(results);
//            fileList.add(results);
//            fileTime.add(startTime+"#"+endTime);
            //删除临时文件
            deleteFile(path);
            //分别处理高度、时间、经纬度格网化、经纬度格网化色斑图
            resList.addAll(dealResult(resMap));


            //文件保存只保存txt
            Map<String,Object> resultMap = new HashMap<>();

            List<Object> filePathList = resList.stream()
                    .flatMap(i -> i.entrySet().stream())
                    .filter(entry -> entry.getValue() != null
                            && entry.getValue().toString().contains(".txt")
                            && entry.getValue().toString().contains(PathUtil.baseDir())
                    )
                    .map(Map.Entry::getValue)
                    .collect(Collectors.toList());

            resultMap.put("result", resList);
            resultMap.put("resultData", JSONUtil.toJsonStr(filePathList));
            resultMap.put("module", ResultSaveModule.DATA_FUSION);
            resultMap.put("submodule", ResultSaveModule.DATA_FUSION_GRID);

            return AjaxResult.success("获取成功！", resultMap);
        }else {
            //先进行一个时间跨度耗时计算
            LocalDateTime begin = LocalDateTime.now();
            //按照全闭合区间获取数据
            String[] args = timeList.get(0).split("#");
            String startTime = args[0];
            String endTime = args[1];
            //获取融合时间点
            String centime = args[3];
            List<Map<String, Object>> list = atmosphericDensityGridMapper.getSatelliteData(args[2],startTime+":00:00",endTime+":00:00");
            if(CollUtil.isEmpty(list)){
                return AjaxResult.error("当前时间范围密度数据不存在");
            }
            SseEmitterUtils.sendMessage(sseId, "5");
//            //拼装python命令
//            String path = allPath.getRootPath().getBase() + allPath.getRootPath().getPathTmp() + allPath.getModuleDir().getDataFusion().get("dir") +folder+"iniPath/"+args[2]+"_"+startTime.replaceAll(" ","-")+"_"+endTime.replaceAll(" ","-")+".txt";
//            writeToFile(path, list);
//            commandList.add(args[2].split("_")[args[2].split("_").length-1]);
//            commandList.add(path);
//            commandList.add(args[4]);
//            commandList.add(args[4]);
//            commandList.add(allPath.getRootPath().getBase() + allPath.getRootPath().getPathTmp() + allPath.getModuleDir().getDataFusion().get("dir") +folder);
//            commandList.add(startTime.replaceAll(" ","-")+"_"+endTime.replaceAll(" ","-"));
//            commandList.add(centime.replaceAll(" ","-"));
//            System.out.println(commandList.get(0)+" "+commandList.get(1)+" "+commandList.get(2)+" "+commandList.get(3)+" "+commandList.get(4)+" "+commandList.get(5)+" "+commandList.get(6)+" "+commandList.get(7)+" "+commandList.get(8)+" "+commandList.get(9));
//            String results = ExecUtil.execPython1(commandList);
//            results = results.split("###")[1];
//            results = results.replaceAll("\'","\"");
//            //进行Json字符串转换
//            Map<String,Object> resMap = JSON.parseObject(results, Map.class);
////            System.out.println("第一次执行"+LocalDateTime.now());
//            //删除文件
//            deleteFile(path);
//            //处理返回值
//            resList.addAll(dealResult(resMap));
            LocalDateTime ends = LocalDateTime.now();
            //Duration dura = Duration.between(begin, ends);
            //根据文件数量进行线程数设置
            int corePoolSize;
            int maximumPoolSize;
            if (timeList.size()-1<12){
                corePoolSize = timeList.size()-1;
                maximumPoolSize = corePoolSize+1;
            }else {
                corePoolSize = 12;
                maximumPoolSize = 2*corePoolSize;
            }
            ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize,maximumPoolSize,0L, TimeUnit.MILLISECONDS,new LinkedBlockingDeque<>());
            Future<?> future = null;
            //timeList.subList(0,1).clear();
            List<Thread> threadList = new ArrayList<>();
            AtomicInteger atomicInteger = new AtomicInteger(0);

            //isStop 表示进程是否终止
            AtomicBoolean isStop = new AtomicBoolean(false);
            for (int i = 0; i < timeList.size(); i++) {
                int num = i;
                List<String> command = new ArrayList<>();
                command.add("python");
                command.add("-u");
                command.add(pythonPath);
                Thread thread = new Thread(() -> {
                    String[] arg = timeList.get(num).split("#");
                    //给调用python 命令中加上参数（-u）代表-u代表不通过缓存，直接输出,或者python代码print 结束后执行刷新缓冲区操作sys.stdout.flush()
                    String paths = allPath.getRootPath().getBase() + allPath.getRootPath().getPathTmp() + allPath.getModuleDir().getDataFusion().get("dir") + folder + "iniPath/" + arg[2] + "_" + arg[0].replaceAll(" ", "-") + "_" + arg[1].replaceAll(" ", "-") + ".txt";
                    writeToFile(paths, list);
                    command.add(arg[2].split("_")[arg[2].split("_").length - 1]);
                    command.add(paths);
                    command.add(arg[4]);
                    command.add(arg[4]);
                    command.add(allPath.getRootPath().getBase() + allPath.getRootPath().getPathTmp() + allPath.getModuleDir().getDataFusion().get("dir") + folder);
                    command.add(arg[0].replaceAll(" ", "-") + "_" + arg[1].replaceAll(" ", "-"));
                    command.add(arg[3].replaceAll(" ", "-"));
                    System.out.println(command.get(0) + " " + command.get(1) + " " + command.get(2) + " " + command.get(3) + " " + command.get(4) + " " + command.get(5) + " " + command.get(6) + " " + command.get(7) + " " + command.get(8) + " " + command.get(9));
                    String resultss = null;
                    try {
                        resultss = ExecUtil.execPythonNoSendSse(command,sseId);
                    } catch (ProcessStopException e) {
                        executor.shutdownNow();
                        isStop.set(true);
                    }
                    //删除文件
                    deleteFile(paths);
                    resultss = resultss.split("###")[1];
                    resultss = resultss.replaceAll("\'", "\"");
                    //进行Json字符串转换
                    Map<String, Object> reMap = JSON.parseObject(resultss, Map.class);
                    List<Map<String, Object>> tmpResList = dealResult(reMap);

                    List<Object> filePathList = tmpResList.stream()
                            .flatMap(o -> o.entrySet().stream())
                            .filter(entry -> entry.getValue() != null
                                    && entry.getValue().toString().contains(".txt")
                                    && entry.getValue().toString().contains(PathUtil.baseDir())
                            )
                            .map(Map.Entry::getValue)
                            .collect(Collectors.toList());
                    String mapKey = String.valueOf(arg[5]); //就是第几组参数的意思，每组参数一个key
                    filePathMap.computeIfAbsent(mapKey, k -> new ArrayList<>()).addAll(filePathList);
                    resList.addAll(tmpResList);
                    //输出进度
                    int index = atomicInteger.addAndGet(1);
                    int step = (int)(index*100/timeList.size());
                    SseEmitterUtils.sendMessage(sseId, step+"");
                });
                threadList.add(thread);
            }

            CompletableFuture.allOf(threadList.stream()
                    .map(entry -> {
                        return CompletableFuture.runAsync(entry, executor);
                    }).toArray(CompletableFuture[]::new)).join();
            executor.shutdown();
            if (isStop.get()) {
                throw new ProcessStopException("动态修正系数计算评估已终止");
            }
            //long seconds = dura.getSeconds();
            //long count = 0;
            ////根据一个时间跨度的耗时计算所有线程执行完所需时间
            ////如果大于12个线程
            //if (timeList.size()-1>12){
            //    int multiple = (int)Math.ceil((double) (timeList.size()-1)/12d);
            //    count = seconds*multiple;
            //}else {
            //    count = seconds;
            //}
            ////计算百分比间隔
            //int intervalPre = (int)Math.ceil((double) count/19d);
            //int nums = 0;
            //int percent =0;
            //while (true){
            //    try {
            //        if (nums<19){
            //            Thread.sleep(intervalPre* 1000L);
            //            percent = percent+5;
            //            SseEmitterUtils.sendMessage(sseId, percent+"");
            //            nums++;
            //        }else {
            //            SseEmitterUtils.sendMessage(sseId, 100+"");
            //            break;
            //        }
            //    } catch (InterruptedException e) {
            //        e.printStackTrace();
            //    }
            //}
        }
        //按顺序进行数据拼接
//        lists.sort(Comparator.comparing(a -> (Long.valueOf(a.get("time") + ""))));
        //文件保存只保存txt
        Map<String,Object> resultMap = new HashMap<>();

        List<List<Object>> filePathList = MapUtil.sort(filePathMap)
                .entrySet()
                .stream()
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());

        resultMap.put("result", resList);
        resultMap.put("resultData", JSONUtil.toJsonStr(filePathList));
        resultMap.put("module", ResultSaveModule.DATA_FUSION);
        resultMap.put("submodule", ResultSaveModule.DATA_FUSION_GRID);
        return AjaxResult.success("获取成功！", resultMap);
    }

    /*
        新融合数据  王姐修改的
     */
    @Override
    public AjaxResult getNewMergeData(DensityMergeParam map) throws ProcessStopException, ServerException {
        //设置每一个用户的通讯管道
        LoginUser loginUser = SecurityUtils.getLoginUser();
        String sseId = map.getSseId()+loginUser.getUsername();
        SseEmitterUtils.sendMessage(sseId, "10");
        List<Map<String, Object>> resList = new ArrayList<>();
        List<String> commandList = new ArrayList<>();


        /**
         * parser = argparse.ArgumentParser(description="地方时格网化计算")
         *     parser.add_argument("-sn", "--sat_name", type=str,
         *                         default="SWARMB", help="卫星名称，默认为 'GRACEA,SWARMB'")
         *     parser.add_argument("-gap", "--gaps", type=str, default="10.0,10.0,10.0",
         *                         help="高度、纬度、经度间隔，格式为 '10,10,10'")
         *     parser.add_argument("-centime", "--cen_time", type=str,
         *                         default="2014-01-01,2014-01-01,1,1,3",
         *                         help="归一化时间（精确到小时）形式为开始日期、结束日期、开始小时、结束小时'2013-11-30,2013-11-30,1,23'")
         *     parser.add_argument("-outpath", "--out_path", type=str,
         *                         default="/dgdq/tmp/dataFusion2",
         *                         help="所需要归一化数据的存储绝对路径，格式为 'file.txt'")
         */

        String  pythonPath = PathUtil.codeModuleDir(BizModule.DATA_FUSION)+PathUtil.moduleDirs().getDataFusion().get("density");
        commandList.add("python");
        commandList.add("-u");
        commandList.add(pythonPath);
        commandList.add("-sn");
        commandList.add(map.getSatellites());
        commandList.add("-gap");
        commandList.add(map.getHightGap()+","+map.getLatGap()+","+map.getLonGap());
        commandList.add("-centime");
        int startHour = DateUtil.hour(map.getStartTime(),true);
        int endHour = DateUtil.hour(map.getEndTime(),true);
        commandList.add(DateUtil.format(map.getStartTime(),"yyyy-MM-dd")+","+DateUtil.format(map.getEndTime(),"yyyy-MM-dd")
                +","+startHour+","+endHour+","+map.getDataGap());
        commandList.add("-outpath");
        commandList.add("/dgdq/tmp/dataFusion2");

        String resultss = "";
        //isStop 表示进程是否终止
        try {
            resultss = ExecUtil.execPythonNoSendSse(commandList,sseId);
        } catch (ProcessStopException e) {
            throw new ProcessStopException("经纬度格网化计算已终止");
        }
        String[] split = resultss.split("###");
        if (split.length<2) {
            return AjaxResult.error(resultss);
        }
        String res = split[1];
        Assert.notBlank(res,"经纬度格网化计算结果不能为空");
        resultss = res.replaceAll("\'", "\"");
        //进行Json字符串转换
        Map<String, Object> reMap = JSON.parseObject(resultss, Map.class);
        SseEmitterUtils.sendMessage(sseId, "90");
        resList.addAll(dealResult(reMap));
        //文件保存只保存txt
        Map<String,Object> resultMap = new HashMap<>();

        List<Object> filePathList = resList.stream()
                .flatMap(i -> i.entrySet().stream())
                .filter(entry -> entry.getValue() != null
                        && entry.getValue().toString().contains(".txt")
                        && entry.getValue().toString().contains(PathUtil.baseDir())
                )
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());

        resultMap.put("result", resList);
        resultMap.put("resultData", JSONUtil.toJsonStr(filePathList));
        resultMap.put("module", ResultSaveModule.DATA_FUSION);
        resultMap.put("submodule", ResultSaveModule.DATA_FUSION_GRID);

        return AjaxResult.success("获取成功！", resultMap);

    }

    public  String m123ain() {
            String resultss ="2014-01-01 01:00:00卫星名称：GRACEA线程数：4线程0:70.0~200.0线程1:210.0~350.0线程2:360.0~500.0线程3:510.0~650.0卫星名称：SWARMB线程数：4线程0:70.0~200.0线程1:210.0~350.0线程2:360.0~500.0线程3:510.0~650.0###{'high': ['/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_70.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_80.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_90.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_100.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_110.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_120.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_130.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_140.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_150.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_160.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_170.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_180.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_190.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_200.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_210.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_220.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_230.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_240.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_250.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_260.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_270.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_280.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_290.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_300.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_310.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_320.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_330.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_340.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_350.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_360.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_370.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_380.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_390.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_400.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_410.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_420.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_430.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_440.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_450.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_460.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_470.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_480.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_490.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_500.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_510.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_520.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_530.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_540.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_550.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_560.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_570.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_580.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_590.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_600.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_610.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_620.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_630.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_640.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/GRACEA_2013-12-31-13_2014-01-01-13_650.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_70.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_80.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_90.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_100.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_110.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_120.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_130.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_140.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_150.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_160.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_170.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_180.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_190.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_200.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_210.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_220.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_230.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_240.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_250.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_260.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_270.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_280.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_290.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_300.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_310.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_320.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_330.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_340.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_350.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_360.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_370.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_380.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_390.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_400.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_410.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_420.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_430.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_440.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_450.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_460.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_470.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_480.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_490.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_500.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_510.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_520.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_530.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_540.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_550.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_560.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_570.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_580.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_590.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_600.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_610.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_620.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_630.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_640.0_high_normalized.txt', '/dgdq/tmp/dataFusion2/high_txt/SWARMB_2013-12-31-13_2014-01-01-13_650.0_high_normalized.txt'], 'time': ['/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_70.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_80.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_90.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_100.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_110.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_120.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_130.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_140.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_150.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_160.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_170.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_180.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_190.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_200.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_210.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_220.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_230.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_240.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_250.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_260.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_270.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_280.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_290.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_300.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_310.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_320.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_330.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_340.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_350.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_360.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_370.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_380.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_390.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_400.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_410.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_420.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_430.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_440.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_450.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_460.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_470.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_480.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_490.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_500.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_510.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_520.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_530.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_540.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_550.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_560.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_570.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_580.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_590.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_600.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_610.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_620.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_630.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_640.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/GRACEA_2013-12-31-13_2014-01-01-13_650.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_70.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_80.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_90.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_100.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_110.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_120.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_130.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_140.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_150.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_160.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_170.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_180.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_190.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_200.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_210.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_220.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_230.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_240.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_250.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_260.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_270.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_280.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_290.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_300.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_310.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_320.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_330.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_340.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_350.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_360.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_370.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_380.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_390.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_400.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_410.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_420.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_430.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_440.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_450.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_460.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_470.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_480.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_490.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_500.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_510.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_520.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_530.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_540.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_550.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_560.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_570.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_580.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_590.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_600.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_610.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_620.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_630.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_640.0_2014-01-01-01_time_normalized.txt', '/dgdq/tmp/dataFusion2/time_txt/SWARMB_2013-12-31-13_2014-01-01-13_650.0_2014-01-01-01_time_normalized.txt'], 'gridtxt': ['/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_70.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_80.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_90.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_100.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_110.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_120.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_130.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_140.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_150.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_160.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_170.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_180.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_190.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_200.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_210.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_220.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_230.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_240.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_250.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_260.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_270.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_280.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_290.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_300.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_310.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_320.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_330.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_340.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_350.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_360.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_370.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_380.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_390.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_400.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_410.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_420.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_430.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_440.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_450.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_460.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_470.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_480.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_490.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_500.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_510.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_520.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_530.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_540.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_550.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_560.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_570.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_580.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_590.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_600.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_610.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_620.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_630.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_640.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/GRACEA_2013-12-31-13_2014-01-01-13_650.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_70.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_80.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_90.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_100.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_110.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_120.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_130.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_140.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_150.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_160.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_170.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_180.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_190.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_200.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_210.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_220.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_230.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_240.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_250.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_260.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_270.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_280.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_290.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_300.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_310.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_320.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_330.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_340.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_350.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_360.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_370.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_380.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_390.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_400.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_410.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_420.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_430.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_440.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_450.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_460.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_470.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_480.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_490.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_500.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_510.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_520.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_530.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_540.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_550.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_560.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_570.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_580.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_590.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_600.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_610.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_620.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_630.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_640.0_2014-01-01-01_10.0_10.0_latlon_grid.txt', '/dgdq/tmp/dataFusion2/gird_txt/SWARMB_2013-12-31-13_2014-01-01-13_650.0_2014-01-01-01_10.0_10.0_latlon_grid.txt'], 'girdjpg': ['/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_70.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_80.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_90.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_100.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_110.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_120.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_130.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_140.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_150.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_160.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_170.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_180.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_190.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_200.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_210.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_220.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_230.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_240.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_250.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_260.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_270.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_280.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_290.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_300.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_310.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_320.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_330.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_340.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_350.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_360.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_370.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_380.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_390.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_400.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_410.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_420.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_430.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_440.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_450.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_460.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_470.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_480.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_490.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_500.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_510.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_520.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_530.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_540.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_550.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_560.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_570.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_580.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_590.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_600.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_610.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_620.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_630.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_640.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/GRACEA_2013-12-31-13_2014-01-01-13_650.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_70.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_80.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_90.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_100.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_110.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_120.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_130.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_140.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_150.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_160.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_170.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_180.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_190.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_200.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_210.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_220.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_230.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_240.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_250.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_260.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_270.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_280.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_290.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_300.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_310.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_320.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_330.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_340.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_350.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_360.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_370.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_380.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_390.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_400.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_410.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_420.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_430.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_440.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_450.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_460.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_470.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_480.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_490.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_500.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_510.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_520.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_530.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_540.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_550.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_560.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_570.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_580.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_590.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_600.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_610.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_620.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_630.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_640.0_2014-01-01-01_10.0_10.0_latlon_grid.png', '/dgdq/tmp/dataFusion2/gird_jpg/SWARMB_2013-12-31-13_2014-01-01-13_650.0_2014-01-01-01_10.0_10.0_latlon_grid.png']}###0:08:42.86922500";
        return resultss;
    }



    @Override
    public SseEmitter push(String id, String flag) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        return SseEmitterUtils.connect(id+loginUser.getUsername(), flag);
    }

    @Override
    public AjaxResult  save(List<Map<String, Object>> list) {

        //TODO tmp文件转为output文件

        for (Map<String, Object> map : list) {
            String[] arg = map.get("path").toString().split("/");
            String[] arg1 = arg[arg.length - 1].split("_");
            int lastIndexOfFirst = arg1[1].lastIndexOf('-');
            int lastIndexOfEnd = arg1[2].lastIndexOf('-');
            String start = arg1[1].substring(0, lastIndexOfFirst) + " " + arg1[1].substring(lastIndexOfFirst + 1);
            String end = arg1[2].substring(0, lastIndexOfEnd) + " " + arg1[2].substring(lastIndexOfEnd + 1);
            String tableName = "";
            switch (map.get("type") + "") {
                case "high":
                    tableName = "HIGH_NORMALIZED_FILE_MANAGEMENT";
                    break;
                case "time":
                    tableName = "TIME_NORMALIZED_FILE_MANAGEMENT";
                    break;
                case "girdjpg":
                    tableName = "GRID_NORMALIZED_FILE_MANAGEMENT";
                    break;
            }
            //查看数据是否存在根据卫星去查询是否存在数据
            List<Map<String, Object>> reList = atmosphericDensityGridMapper.selectList(arg1[0], start, end, tableName);
            if (reList != null && !reList.isEmpty()) {
                continue;
            }
            atmosphericDensityGridMapper.insert(tableName, DateUtils.convertString2Date("yyyy-MM-dd HH",start), DateUtils.convertString2Date("yyyy-MM-dd HH",end), arg1[0], map.get("path")+"", new Date());
            if ((map.get("type") + "").equals("girdjpg")){
                atmosphericDensityGridMapper.insert("GRID_JPG_NORMALIZED_FILE_MANAGEMENT", DateUtils.convertString2Date("yyyy-MM-dd HH",start), DateUtils.convertString2Date("yyyy-MM-dd HH",end), arg1[0], map.get("path")+"", new Date());
            }
        }
        return AjaxResult.success("文件保存成功");
    }
    @Override
    public List<Map<String, Object>> selectList(String staName, String startTime, String endTime, String tableName) {
        return atmosphericDensityGridMapper.selectList(staName, startTime, endTime, tableName);
    }


    //已经废弃使用
//    @Override
//    public AjaxResult getTimeNormalization(Map<String, Object> map) {
//        List<Map<String, Object>> dataList = (List<Map<String, Object>>) map.get("param");
//        List<String> commandList = new ArrayList<>();
//        commandList.add("python");
//        commandList.add("-u");
//        commandList.add(timePath+timeName);
//        List<String> fileList = new ArrayList<>();
//        List<String> fileTime = new ArrayList<>();
//        List<Map<String, Object>> lists = new ArrayList<>();
//        String sseId = map.get("sseId")+"";
//        LoginUser loginUser = SecurityUtils.getLoginUser();
//        sseId+=loginUser.getUsername();
//        Map<String, Object> mp = new HashMap<>();
//        if (dataList.size()==1){
//            commandList.add(dataList.get(0).get("path")+"");
//            commandList.add("out");
//            System.out.println(commandList.get(0)+" "+commandList.get(1)+" "+commandList.get(2)+" "+commandList.get(3)+" "+commandList.get(4));
//            String results = ExecUtil.execPython(commandList ,map.get("sseId")+"");
//            results = results.split("###")[1];
//            System.out.println(results);
//            Map<String, Object> resMap = readFile(results);
//            fileList.add(results);
//            fileTime.add(dataList.get(0).get("startTime")+"#"+dataList.get(0).get("endTime"));
//            SseEmitterUtils.sendMessage(sseId, "100");
//            SseEmitterUtils.remove(sseId);
//            mp.put("dataReuslt", resMap.get(resMap.get("time")));
//            mp.put("filePath",fileList);
//            mp.put("fileTime",fileTime);
//            mp.put("tableName","TIME_NORMALIZED_FILE_MANAGEMENT");
//            return AjaxResult.success("获取成功！", mp);
//        }else {
//            //先进行一个时间跨度耗时计算
//            LocalDateTime begin = LocalDateTime.now();
//            //按照全闭合区间获取数据
//            //拼装python命令
//            String path = dataList.get(0).get("path")+"";
//            commandList.add(path);
//            commandList.add("out");
//            System.out.println(commandList.get(0)+" "+commandList.get(1)+" "+commandList.get(2)+" "+commandList.get(3)+" "+commandList.get(4));
//            String results = ExecUtil.execPython1(commandList);
//            System.out.println("jieguo"+results);
//            results = results.split("###")[1];
////            System.out.println("第一次执行"+LocalDateTime.now())
//            lists.add(readFile(results));
//            fileList.add(results);
//            LocalDateTime ends = LocalDateTime.now();
//            Duration dura = Duration.between(begin, ends);
//            //根据文件数量进行线程数设置
//            int corePoolSize;
//            int maximumPoolSize;
//            if (dataList.size()-1<12){
//                corePoolSize = dataList.size()-1;
//                maximumPoolSize = corePoolSize+1;
//            }else {
//                corePoolSize = 12;
//                maximumPoolSize = 2*corePoolSize;
//            }
//            dataList.subList(0,1).clear();
//            ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize,maximumPoolSize,0L, TimeUnit.MILLISECONDS,new LinkedBlockingDeque<>());
//            Future<?> future = null;
//            for (int i = 0; i < dataList.size(); i++) {
//                int num = i;
//                List<String> command = new ArrayList<>();
//                command.add("python");
//                command.add("-u");
//                command.add(timePath+timeName);
//                future = executor.submit(() -> {
//                    //给调用python 命令中加上参数（-u）代表-u代表不通过缓存，直接输出,或者python代码print 结束后执行刷新缓冲区操作sys.stdout.flush()
//                    String paths = dataList.get(num).get("path")+"";
//                    System.out.println(dataList.get(num).get("path")+"ceshi"+dataList.get(num).get("path"));
//                    command.add(paths);
//                    System.out.println(paths);
//                    command.add("out");
//                    System.out.println(command.get(0)+" "+command.get(1)+" "+command.get(2)+" "+command.get(3)+" "+command.get(4));
//                    String resultss = ExecUtil.execPython1(command);
//                    resultss = resultss.split("###")[1];
//                    lists.add(readFile(resultss));
//                    fileList.add(resultss);
//                    fileTime.add(dataList.get(num).get("startTime")+"#"+dataList.get(num).get("endTime"));
//                });
//            }
//            long seconds = dura.getSeconds();
//            long count;
//            //根据一个时间跨度的耗时计算所有线程执行完所需时间
//            //如果大于12个线程
//            if (dataList.size()-1>12){
//                int multiple = (int)Math.ceil((double) (dataList.size()-1)/12d);
//                count = seconds*multiple;
//            }else {
//                count = seconds;
//            }
//            //计算百分比间隔
//            int intervalPre = (int)Math.ceil((double) count/19d);
//            int nums = 0;
//            int percent =0;
//            while (true){
//                try {
//                    if (nums<19){
//                        Thread.sleep(intervalPre* 1000L);
//                        percent = percent+5;
//                        SseEmitterUtils.sendMessage(sseId, percent+"");
//                        nums++;
//                    }else {
//                        SseEmitterUtils.sendMessage(sseId, 100+"");
//                        break;
//                    }
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        return AjaxResult.success("获取成功！", dealReturnData(lists, "TIME_NORMALIZED_FILE_MANAGEMENT",sseId, fileList, fileTime));
//    }

    @Override
    public AjaxResult show(String path) {
        return AjaxResult.success(newReadFile(path));
    }

    @Override
    public String[] calculateGrid(Date time, Integer hight, String sseId) {

        LoginUser loginUser = SecurityUtils.getLoginUser();
        sseId = sseId+loginUser.getUsername();
        String timeStr = DateUtil.format(time, "yyyy-MM-dd-HH:mm:ss");
        String key = "CALC_RES:"+timeStr+"_"+hight;
        String cachStr = (String)redisTemplate.opsForValue().get(key);
        if (null == cachStr) {
            //建立sse连接,推送
            //调用python lon_lat_grid.py 2020-01-10-00:00:00 500 /dgdq/tmp/dataFusion
            //临时目录
            String tmpPath = PathUtil.tmpModuleDir(BizModule.DATA_FUSION);
            //脚本目录
            String script = PathUtil.codeModuleDir(BizModule.DATA_FUSION) + PathUtil.moduleDirs().getDataFusion().get("datagrid");
            //拼接sql
            List<String> args = new ArrayList<>();
            args.add("python");
            //实时输出日志，而不是等程序结束后
            args.add("-u");
            args.add(script);
            args.add(timeStr);
            args.add(hight+"");
            args.add(tmpPath);
            ProcessBuilder processBuilder = new ProcessBuilder(args);
            log.info("计算格网化：{}",args);
            StringBuilder result = new StringBuilder();
            Process process = null;
            try {
                process = processBuilder.start();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
                String packReadLine;
                while (null != (packReadLine = bufferedReader.readLine())) {
                    // -- 5.00%   --100.00%
                    if (packReadLine.startsWith("--")){
                        //传给页面进度
                        log.info("py 输出：{}",packReadLine);
                        String str = packReadLine.replaceAll("[-\\%]+", "");
                        SseEmitterUtils.sendMessage(sseId, str);
                    }else {
                        //出错 或结束了
                        result.append(packReadLine).append("#");
                    }
                }
                process.waitFor();
            } catch (Exception e) {
                log.error("",e);
            }finally {
                //传给前端表示已完成
                SseEmitterUtils.sendMessage(sseId, "100");
                SseEmitterUtils.remove(sseId);
                if (null != process) {
                    process.destroy();
                }
            }
            // result  ####xxxx###xxxx###
            cachStr = result.toString();
            log.info("计算格网化结果：{}",cachStr);
            //将结果保存到redis缓存中
            redisTemplate.opsForValue().set(key,cachStr,2,TimeUnit.HOURS);
        }else {
            //传给前端表示已完成
            SseEmitterUtils.sendMessage(sseId, "100");
            SseEmitterUtils.remove(sseId);
        }
        String[] split = cachStr.split("#+");
        return split;
    }



    @Override
    public File calculateGridSave(Date time, Integer hight) {
        String[] split = this.calculateGrid(time, hight, null);
        String dataPath = split[1];
        String pngPath = split[2];
        //TODO 将结果保存到数据库，并打包压缩
        String timeStr = DateUtil.format(time, "yyyyMMddHHmmss");
        String tmpModuleDir = PathUtil.tmpModuleDir(BizModule.DATA_FUSION)+"/"+timeStr+"_"+hight+".zip";
        File zip = ZipUtil.zip(new File(tmpModuleDir), false, new File(dataPath), new File(pngPath));
        return zip;
    }

    private void writeToFile(String filePath, List<Map<String, Object>> list){
        //判断文件目录是否存在
        File file = new File(filePath);
        if (file.exists()) {
            file.delete();
        }
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        //将数据写入本地文件
        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter(filePath, true);
            StringBuilder stringBuilder = new StringBuilder("time,longitude,latitude,altitude,density");
            fileWriter.write(stringBuilder.toString());
            fileWriter.write("\n");
            for (Map<String, Object> row : list) {
                StringBuilder sb = new StringBuilder();
                sb.append((row.get("time")+"").substring(0,19)).append(",").append(row.get("lon")).append(",").append(row.get("lat")).append(",").append(row.get("alt")).append(",").append(row.get("density"));
                fileWriter.write(sb.toString());
                fileWriter.write("\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (fileWriter != null) {
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public Map<String, Object> readFile(String filePath) {
        //进行文件读取
        Map<String, Object> resMap = new HashMap<>();
        String time = filePath.substring(filePath.lastIndexOf('/') + 1).replaceAll("-","").split("_")[0];
        Map<String, Object> map = new HashMap<>();
        try {
            //进行文件信息添加
            InputStreamReader read = new InputStreamReader(new FileInputStream(filePath), StandardCharsets.UTF_8);
            BufferedReader bufferedReader = new BufferedReader(read);
            String str = null;
            bufferedReader.readLine();
            List<String> timeList = new ArrayList<>();
            List<Object> lonList = new ArrayList<>();
            List<Object> latList = new ArrayList<>();
            List<Object> altList = new ArrayList<>();
            List<Object> densList = new ArrayList<>();
            List<Object> densCalList = new ArrayList<>();
            while ((str = bufferedReader.readLine()) != null){
                String[] args = str.split(",");
                timeList.add(args[0]);
                lonList.add(Double.valueOf(args[1]));
                latList.add(Double.valueOf(args[2]));
                altList.add(Double.valueOf(args[3]));
                densList.add(Double.valueOf(args[4]));
                densCalList.add(Double.valueOf(args[5]));
            }
            map.put("time",timeList);
            map.put("lon",lonList);
            map.put("lat",latList);
            map.put("alt",altList);
            map.put("density",densList);
            map.put("density_cal",densCalList);
        } catch (Exception e) {
            e.printStackTrace();
        }
        resMap.put(time,map);
        resMap.put("time",time);
        return resMap;
    }

    public Map<String, Object> newReadFile(String filePath) {
        //进行文件读取
        String time = filePath.substring(filePath.lastIndexOf('/') + 1).replaceAll("-","").split("_")[0];
        Map<String, Object> map = new HashMap<>();
        try {
            //进行文件信息添加
            InputStreamReader read = new InputStreamReader(new FileInputStream(filePath), StandardCharsets.UTF_8);
            BufferedReader bufferedReader = new BufferedReader(read);
            String str = null;
            bufferedReader.readLine();
            List<String> timeList = new ArrayList<>();
            List<Object> lonList = new ArrayList<>();
            List<Object> latList = new ArrayList<>();
            List<Object> altList = new ArrayList<>();
            List<Object> densList = new ArrayList<>();
            List<Object> densCalList = new ArrayList<>();
            while ((str = bufferedReader.readLine()) != null){
                String[] args = str.split(",");
                timeList.add(args[0]);
                lonList.add(Double.valueOf(args[1]));
                latList.add(Double.valueOf(args[2]));
                altList.add(Double.valueOf(args[3]));
                densList.add(Double.valueOf(args[4]));
                String densCal = "";
                if (args[5].contains("-")){
                    String[] dens = args[5].split("-");
                    densCal = dens[0]+"-"+Integer.valueOf(dens[1]);
                }else {
                    densCal = args[5];
                }
                densCalList.add(densCal);
            }
            map.put("time",timeList);
            map.put("lon",lonList);
            map.put("lat",latList);
            map.put("alt",altList);
            map.put("density",densList);
            map.put("density_cal",densCalList);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }

    public static void deleteFile(String filePath) {
        File file = new File(filePath);
        if (file.exists()) {
            file.delete();
            System.gc();
        }
    }

    /**
     * 拼装处理返回结果
     */
    private Map<String, Object> dealReturnData(List<Map<String, Object>> list, String tableName, String sseId, List<String> fileList,  List<String> fileTime){
        Map<String, Object> resMap = new HashMap<>();
        List<String> tiList = new ArrayList<>();
        List<Object> lonList = new ArrayList<>();
        List<Object> latList = new ArrayList<>();
        List<Object> altList = new ArrayList<>();
        List<Object> densList = new ArrayList<>();
        List<Object> densCalList = new ArrayList<>();
        for (Map<String, Object> mp : list) {
            tiList.addAll((List<String>) ((Map)mp.get(mp.get("time"))).get("time"));
            lonList.addAll((List<Double>) ((Map)mp.get(mp.get("time"))).get("lon"));
            latList.addAll((List<Double>) ((Map)mp.get(mp.get("time"))).get("lat"));
            altList.addAll((List<Double>) ((Map)mp.get(mp.get("time"))).get("alt"));
            densList.addAll((List<Double>) ((Map)mp.get(mp.get("time"))).get("density"));
            densCalList.addAll((List<Double>) ((Map)mp.get(mp.get("time"))).get("density_cal"));
        }
        Map<String, Object> reMap = new HashMap<>();
        reMap.put("time",tiList);
        reMap.put("lon",lonList);
        reMap.put("lat",latList);
        reMap.put("alt",altList);
        reMap.put("density",densList);
        reMap.put("density_cal",densCalList);
        //关闭连接
        SseEmitterUtils.remove(sseId);
        resMap.put("dataReuslt",reMap);
        resMap.put("filePath",fileList);
        resMap.put("fileTime",fileTime);
        resMap.put("tableName",tableName);
        return resMap;
    }

    private Map<String, Object> dealData(String path, String type, List<String> list, Integer index){
        String[] arg = path.split("/");
        String[] arg1 = arg[arg.length-1].split("_");
        int lastIndexOfFirst = arg1[1].lastIndexOf('-');
        int lastIndexOfEnd = arg1[2].lastIndexOf('-');
        String start = arg1[1].substring(0, lastIndexOfFirst) + " " + arg1[1].substring(lastIndexOfFirst + 1);
        String end = arg1[2].substring(0, lastIndexOfEnd) + " " + arg1[2].substring(lastIndexOfEnd + 1);
        Map<String, Object> map = new HashMap<>();
        map.put("timeRange", start+"至"+end);
        map.put("fileName",arg[arg.length-1]);
        map.put("path",path);
        map.put("type",type);
        switch (type){
            case "high":
                map.put("descript",arg1[0]+"卫星高度归一化（"+arg1[3]+"km）数据产品");
                break;
            case "time":
                int lastIndex = arg1[4].lastIndexOf('-');
                String time = arg1[4].substring(0, lastIndex) + " " + arg1[4].substring(lastIndex + 1);
                map.put("descript",arg1[0]+"卫星"+arg1[3]+"km时间归一化（"+time+"）数据产品");
                break;
            case "girdjpg":
                int lastIndexOf = arg1[4].lastIndexOf('-');
                String cenTime = arg1[4].substring(0, lastIndexOf) + " " + arg1[4].substring(lastIndexOf + 1);
                map.put("descript",arg1[0]+"卫星"+arg1[3]+"km"+cenTime+"时间（"+arg1[4]+"X"+"空间分辨率经纬度格网化）"+"数据产品");
                map.put("filePath",list.get(index));
                map.put("path",path);
                break;
        }
        return map;
    }
    private List<Map<String, Object>> dealResult(Map<String,Object> resMap){
        //分别处理高度、时间、经纬度格网化、经纬度格网化色斑图
        List<String> highList = (List<String>) resMap.get("high");
        List<String> timList = (List<String>) resMap.get("time");
        List<String> gridList = (List<String>) resMap.get("gridtxt");
        List<String> girdjpg = (List<String>) resMap.get("girdjpg");
        List<Map<String, Object>> resList = new ArrayList<>();
        for (String high : highList) {
            resList.add(dealData(high, "high", null, null));
        }
        for (String time : timList) {
            resList.add(dealData(time, "time", null, null));
        }
        for(int i = 0; i<girdjpg.size(); i++){
            resList.add(dealData(girdjpg.get(i), "girdjpg", gridList, i));
        }
        return resList;
    }
}
